import { IPSModelSortable } from '../../ipsmodel-sortable';
import { IPSApplicationObject } from '../ipsapplication-object';
import { IPSAppMsgTempl } from '../msg/ipsapp-msg-templ';
import { IPSLanguageRes } from '../../res/ipslanguage-res';
import { IPSViewMsg } from '../../view/ipsview-msg';

/**
 *
 * 子接口类型识别属性[dynamicMode]
 * @export
 * @interface IPSAppViewMsg
 */
export interface IPSAppViewMsg extends IPSViewMsg, IPSApplicationObject, IPSModelSortable {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 动态模式
   * @description 值模式 [是否] {1：是、 0：否 }
   * @type {( number | 1 | 0)}
   * @default 0
   */
  dynamicMode: number | 1 | 0;

  /**
   * 显示消息
   * @type {string}
   */
  message: string;

  /**
   * 消息类型
   * @description 值模式 [视图消息类型] {INFO：常规信息、 WARN：警告信息、 ERROR：错误信息、 CUSTOM：自定义信息 }
   * @type {( string | 'INFO' | 'WARN' | 'ERROR' | 'CUSTOM')}
   */
  messageType: string | 'INFO' | 'WARN' | 'ERROR' | 'CUSTOM';

  /**
   * 应用消息模板
   *
   * @type {IPSAppMsgTempl}
   */
  getPSAppMsgTempl(): IPSAppMsgTempl | null;

  /**
   * 应用消息模板
   *
   * @type {IPSAppMsgTempl}
   */
  get psAppMsgTempl(): IPSAppMsgTempl | null;

  /**
   * 应用消息模板（必须存在）
   *
   * @type {IPSAppMsgTempl}
   */
  getPSAppMsgTemplMust(): IPSAppMsgTempl;

  /**
   * 显示位置
   * @description 值模式 [视图消息位置] {TOP：视图上方、 BOTTOM：视图下方、 BODY：视图内容区、 POPUP：弹出、 CUSTOM：自定义 }
   * @type {( string | 'TOP' | 'BOTTOM' | 'BODY' | 'POPUP' | 'CUSTOM')}
   */
  position: string | 'TOP' | 'BOTTOM' | 'BODY' | 'POPUP' | 'CUSTOM';

  /**
   * 消息删除模式
   * @description 值模式 [视图消息删除模式] {0：无关闭、 1：默认关闭、 2：本次关闭 }
   * @type {( number | 0 | 1 | 2)}
   */
  removeMode: number | 0 | 1 | 2;

  /**
   * 抬头
   * @type {string}
   */
  title: string;

  /**
   * 抬头语言资源标记
   * @type {string}
   */
  titleLanResTag: string;

  /**
   * 抬头语言资源对象
   *
   * @type {IPSLanguageRes}
   */
  getTitlePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 抬头语言资源对象
   *
   * @type {IPSLanguageRes}
   */
  get titlePSLanguageRes(): IPSLanguageRes | null;

  /**
   * 抬头语言资源对象（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getTitlePSLanguageResMust(): IPSLanguageRes;

  /**
   * 支持关闭
   * @type {boolean}
   */
  enableRemove: boolean;
}
